home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 21 / CU Amiga Magazine's Super CD-ROM 21 (1998)(EMAP Images)(GB)[!][issue 1998-04].iso / CUCD / Magazine / C_Tutorial / Part-9 / wb2 / bitmap.c < prev    next >
C/C++ Source or Header  |  1997-10-27  |  2KB  |  69 lines

  1. #include "bitmap.h"
  2. #include "screen.h"
  3.  
  4. #include<exec/memory.h>
  5.  
  6. #include<stdio.h>
  7.  
  8. #include<clib/exec_protos.h>
  9. #include<clib/graphics_protos.h>
  10.  
  11. /* Global handle for our bitmap */
  12. static struct BitMap* bitmap = NULL;
  13. /* Global record of requested depth, width and height */
  14. static int depth, width, height;
  15.  
  16. /* Create a bitmap */
  17. int createBitmap()
  18. {
  19.     struct Screen* scr = getScreen();
  20.     /* The MEMF_CLEAR flag is vital, since it zeroes the allocated memory. */
  21.     /* Thus the pointers in the bitmap will be NULL, if we don't manage to */
  22.     /* allocate them properly. */
  23.     if(bitmap = AllocMem(sizeof(struct BitMap), MEMF_PUBLIC | MEMF_CLEAR))
  24.     {
  25.         int plane;
  26.         /* Our new BitMap has sizes based on the screen BitMap */
  27.         depth = scr->BitMap.Depth;
  28.         width = scr->Width;
  29.         height = scr->Height;
  30.         InitBitMap(bitmap, depth, width, height);
  31.         for(plane = 0; plane < depth; plane++)
  32.         {
  33.             bitmap->Planes[plane] = AllocRaster(width, height);
  34.             if(bitmap->Planes[plane] == NULL)
  35.             {
  36.                 printf("Error: could not create planes for bitmap\n");
  37.                 return FALSE;
  38.             }
  39.         }
  40.         /* If we get here, we succeeded. */
  41.         return TRUE;
  42.     }
  43.     else
  44.         printf("Error: could not create bitmap\n");
  45.     return FALSE;
  46. }
  47.  
  48. /* Free any allocated bitmap */
  49. void freeBitmap()
  50. {
  51.     if(bitmap)
  52.     {
  53.         int plane;
  54.         for(plane = 0; plane < depth; plane++)
  55.         {
  56.             if(bitmap->Planes[plane])
  57.                 FreeRaster(bitmap->Planes[plane], width, height);
  58.         }
  59.         FreeMem(bitmap, sizeof(struct BitMap));
  60.     /* Set to NULL to indicate that it's been freed */
  61.         bitmap = NULL;
  62.     }
  63. }
  64.  
  65. struct BitMap* getBitmap()
  66. {
  67.     return bitmap;
  68. }
  69.